#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
const int N=2e4+10;

int h[N],ne[N],to[N],idx;
int flg[N];
int vis[N];
void add(int x,int y)
{
	to[idx]=y;
	ne[idx]=h[x];
	h[x]=idx++;
}
int bfs(int x)
{
	memset(vis,0,sizeof(vis));
	queue<int> q;
	q.push(x);
	vis[x]=1;
	int ret=0;
	while(q.size())
	{
		int sz=q.size();
		int tmp=N;
		while(sz--)
		{
			int u=q.front();
			q.pop();
			for(int i=h[u];~i;i=ne[i])
			{
				int j=to[i];
				if(vis[j])
					continue;
				tmp=min(tmp,j);
				q.push(j);
				vis[j]=1;
			}		
		}
		if(tmp!=N)
			ret=tmp;
			
	}
	return ret;
}
int main()
{
	int n,m,k;
	memset(h,-1,sizeof(h));
	cin>>n>>m>>k;
	for(int i=0;i<m;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		
		add(x,y);
		add(y,x);
		flg[x]=flg[y]=1;
	}
	
	for(int i=0;i<k;i++)
	{
		int t;
		cin>>t;
		if(flg[t]==0)
		{
			cout<<0<<endl;
			continue;
		}
		cout<<bfs(t)<<endl;
		
	}
	
	return 0;
}
